package com.atguigu.wordcount;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

/*
    在集群上运行Job
    1.将输入和输出路径改成从main的形参读取
    2.打包
    3.在集群上运行
     hadoop jar MRDemo.jar com.atguigu.wordcount.WCDriver2 /input /output
            MRDemo.jar ： jar包名称
            com.atguigu.wordcount.WCDriver2 ：是jar包中运行的类的全类名
            /input ： 数据的路径（HDFS上）
            /output ：输出结果的路径（HDFS上 必须不存在）
 */
public class WCDriver2 {
    public static void main(String[] args) throws Exception {
        //1.创建Job实例
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf);

        //2.给Job赋值
        //设置Jar加载路径--将main方法所在的类传过去（如果是本地运行可以不写）
        job.setJarByClass(WCDriver2.class);
        //设置Mapper和Reducer类
        job.setMapperClass(WCMapper.class);
        job.setReducerClass(WCReducer.class);
        //设置Mapper输出的key,value的类型
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(LongWritable.class);
        //设置最终输出的key,value的类型(在这是Reducer输出的key,value的类型)
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(LongWritable.class);
        //设置数据的输入输出路径
        FileInputFormat.setInputPaths(job,new Path(args[0]));
        //注意：输出的目录必须不存在
        FileOutputFormat.setOutputPath(job,new Path(args[1]));

        //3.运行Job
        /*
        waitForCompletion(boolean verbose)
        verbose : 是否打印用户执行时的信息
        返回值  ：如果为true表示执行成功
         */
        boolean b = job.waitForCompletion(true);
        //退出JVM时的状态：0为正常退出，1为非正常退出
        System.exit(b? 0 : 1);
    }
}
